home *** CD-ROM | disk | FTP | other *** search
- /*
- File: OCEObjects.h
-
- Copyright: © 1991-1994 by Apple Computer, Inc.
- All rights reserved.
-
- Part of the AOCE Sample SMSAM Package. Consult the license
- which came with this software for your specific legal rights.
-
- */
-
-
-
- #ifndef __OCEOBJECTS__
- #define __OCEOBJECTS__
-
- #ifndef __OCE__
- #include "OCE.h"
- #endif
-
- #ifndef __OCEMAIL__
- #ifndef THINK_CPLUS
- #include <OCEMail.h>
- #else
- #include "OCEMail.h"
- #endif
- #endif
-
- #ifndef __DIRECTOBJECT__
- #include "DirectObject.h"
- #endif
-
- #pragma push
- #pragma segment OCEObjects
-
- class ostream;
- class TAbstractFile;
-
- /***********************************|****************************************/
-
- // these routines are used to toggle frequent validity
- // checking of objects during internal operations
-
- extern void SetOCEObjectsInternalValidityChecking ( Boolean = true ); // for frequent internal validity checks
- extern Boolean GetOCEObjectsInternalValidityChecking ();
-
- // if we are in debug mode, then perform frequent internal checks within OCEObject classes
-
- #if defined ( debug ) || defined ( DEBUG )
- #define INTERNAL_CHECKS
- #else
- #undef INTERNAL_CHECKS
- #endif
-
- /*============================================================================
-
- TRString is a class which represents an OCE RString.
-
- Some examples of OOP operations that you can perform with TRStrings are:
-
- TRString r1 ( (ProtoRString*) p ); // construct from ProtoRString*
- TRString r2 ( "String", smGreek ); // construct from C string with script
- TRString r3 ( "\pString" ); // construct from Pascal string
-
- r1 = r2; // assign from TRString
- r1 = (RString&) s; // assign from RString
- r1 = (RString*) p; // safe assign from RString*
- r1 = "String"; // assign from C string
- r1 = "\pString"; // assign from Pascal string
-
- if ( r1 >= r2 ) … // compare with TRString
- if ( r1 < r2 ) … // compare with TRString
- if ( r1 > s ) … // compare with RString
- if ( r1 == "String" ) … // compare with C string
- if ( r1 != "\pString" ) … // compare with Pascal string
-
- OCEPackPathName ( r1, 1, … ) // autoconvert to const RStringPtr
- strcpy ( s, r1 ); // autoconvert to const char*
- DrawString ( r1 ); // autoconvert to const StringPtr
-
- r1 [ 3 ] = 'X'; // safe character setter
- Byte c = r1 [ 24 ]; // safe character getter
-
- r1.SetLength ( 21 ); // length setting
- short l = r1.GetLength (); // length getting
-
- r1.SetScript ( smJapanese ); // script setting
- short s = r1.SetScript (); // script getting
-
- r1.SetKind ( kOCEDirName ); // kind setting
- RStringKind k = r1.GetKind (); // kind getting
-
- r1.MakeUppercase (); // convert to upper case
- r1.MakeLowercase (); // convert to lower case
-
- TAbstractFile& file …
- r1.Write ( file ); // write object to file
- r1.Read ( file ); // read object from file
-
- cout << "R = " << r1 << '\n'; // stream out to console
-
- ----------------------------------------------------------------------------*/
-
- typedef const RString* ConstRStringPtr;
- typedef const ConstRStringPtr ConstRStringPtrArray [];
-
- class TRString : public TDirectObject
- {
- public: TRString ();
- TRString ( CharacterSet, RStringKind = kOCEGenericSensitive );
- TRString ( const char*, CharacterSet = smRoman, RStringKind = kOCEGenericSensitive );
- TRString ( const StringPtr, CharacterSet = smRoman, RStringKind = kOCEGenericSensitive );
- TRString ( const void*, unsigned short length, CharacterSet = smRoman, RStringKind = kOCEGenericSensitive );
- TRString ( const TRString& );
- TRString ( const TRString&, RStringKind newKind );
- TRString ( const RString&, RStringKind = kOCEGenericSensitive );
- TRString ( const RString*, RStringKind = kOCEGenericSensitive );
- ~TRString ();
-
- // assignment operators ----------------------------------------------------
-
- TRString& operator = ( const TRString& );
- TRString& operator = ( const RString& );
- TRString& operator = ( const RString* );
- TRString& operator = ( const char* );
- TRString& operator = ( const StringPtr );
-
- // conversion operators -----------------------------------------------------
-
- // these 4 routines provide read-only access, if you cast result to non-const, you’ll shoot yourself
- operator const RString* () const;
- operator const RString& () const;
- operator const char* () const;
- operator const StringPtr () const;
-
- // accessor functions ------------------------------------------------------
-
- // caller must have allocated the data passed to these 3 functions
- Boolean GetString ( RString&, unsigned short maxChars ) const;
- Boolean GetString ( StringPtr, unsigned short maxChars ) const;
- Boolean GetString ( char*, unsigned short maxChars ) const;
-
- // caller will own the data allocated and returned by these 3 functions
- RString* GetNewRString () const;
- StringPtr GetNewStringPtr () const;
- char* GetNewString () const;
-
- // safe setter/getters for individual chars
- Byte& operator [] ( unsigned short zeroBasedIndex ) const;
-
- unsigned short SetLength ( unsigned short );
- unsigned short GetLength () const;
-
- void SetScript ( CharacterSet );
- CharacterSet GetScript () const;
-
- void SetKind ( RStringKind );
- RStringKind GetKind () const;
-
- void MakeLowercase ();
- void MakeUppercase ();
-
- // comparison operators ----------------------------------------------------
-
- Boolean operator == ( const TRString& ) const;
- Boolean operator == ( const RString& ) const;
- Boolean operator == ( const char* ) const;
- Boolean operator == ( const StringPtr ) const;
-
- Boolean operator != ( const TRString& ) const;
- Boolean operator != ( const RString& ) const;
- Boolean operator != ( const char* ) const;
- Boolean operator != ( const StringPtr ) const;
-
- Boolean operator > ( const TRString& ) const;
- Boolean operator > ( const RString& ) const;
- Boolean operator > ( const char* ) const;
- Boolean operator > ( const StringPtr ) const;
-
- Boolean operator < ( const TRString& ) const;
- Boolean operator < ( const RString& ) const;
- Boolean operator < ( const char* ) const;
- Boolean operator < ( const StringPtr ) const;
-
- // comparison methods -------------------------------------------------------
-
- long Compare ( const TRString& ) const;
- long Compare ( const RString& ) const;
- long Compare ( const char* ) const;
- long Compare ( const StringPtr ) const;
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- // utility methods ----------------------------------------------------------
-
- static unsigned short GetLogicalLength ( const RString* );
- static unsigned short GetPhysicalSize ( unsigned short logicalLength );
- static unsigned short GetLogicalSize ( unsigned short physicalSize );
- static unsigned short GetPhysicalSize ( const RString* );
-
- // debugging methods --------------------------------------------------------
-
- Boolean IsValid () const;
- static Boolean IsValid ( const TRString* );
- static Boolean IsValid ( ConstRStringPtr, RStringKind );
-
- protected: RString* fString;
- RStringKind fKind;
-
- Boolean IsValidInternal () const;
- Boolean IsValidIndex ( unsigned short ) const;
-
- static RString* Allocate ( unsigned short logicalLength, CharacterSet script = smRoman, const void* source = nil );
- static void Deallocate ( RString*& );
- static Boolean IsValidInternal ( const RString*, RStringKind );
- };
-
- /***********************************|****************************************/
-
- class TDirectoryName : public TRString
- {
- public: TDirectoryName ( CharacterSet = smRoman );
- TDirectoryName ( const char*, CharacterSet = smRoman );
- TDirectoryName ( const StringPtr, CharacterSet = smRoman );
- TDirectoryName ( const void*, unsigned short length, CharacterSet = smRoman );
- TDirectoryName ( const TDirectoryName& );
- TDirectoryName ( const DirectoryName& );
- TDirectoryName ( const DirectoryName* );
- TDirectoryName ( const TRString& );
- TDirectoryName ( const RString& );
- TDirectoryName ( const RString* );
- ~TDirectoryName ();
-
- // conversion operators -----------------------------------------------------
-
- // these 2 routines provide read-only access, if you cast result to non-const, you’ll shoot yourself
- operator const DirectoryName* () const;
- operator const DirectoryName& () const;
- };
-
- /***********************************|****************************************/
-
- class TCreationID : public TDirectObject
- {
- public: TCreationID (); // defaults to (0,0)
- TCreationID ( unsigned long a, unsigned long b = 0 );
- TCreationID ( const TCreationID& );
- TCreationID ( const CreationID& );
- TCreationID ( const CreationID* );
- ~TCreationID ();
-
- // conversion operators -----------------------------------------------------
-
- operator const CreationID* () const;
- operator const CreationID& () const;
-
- // assignment operators ----------------------------------------------------
-
- TCreationID& operator = ( const TCreationID& );
- TCreationID& operator = ( const CreationID& );
-
- // comparison methods -------------------------------------------------------
-
- Boolean operator == ( const TCreationID& ) const;
- Boolean operator == ( const CreationID& ) const;
-
- Boolean operator != ( const TCreationID& ) const;
- Boolean operator != ( const CreationID& ) const;
-
- // access methods -----------------------------------------------------------
-
- Boolean IsNull () const;
- void GetID ( CreationID& ) const;
- void GetID ( unsigned long& a, unsigned long& b ) const;
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- protected: CreationID fID;
- };
-
- /***********************************|****************************************/
-
- class TDirDiscriminator : public TDirectObject
- {
- public: TDirDiscriminator ();
- TDirDiscriminator ( OCEDirectoryKind signature, unsigned long misc = 0 );
- TDirDiscriminator ( const TDirDiscriminator& d );
- TDirDiscriminator ( const DirDiscriminator& d );
- TDirDiscriminator ( const DirDiscriminator* d );
- ~TDirDiscriminator ();
-
- // conversion operators -----------------------------------------------------
-
- operator DirDiscriminator* () const;
- operator DirDiscriminator& () const;
-
- // assignment operators ----------------------------------------------------
-
- TDirDiscriminator& operator = ( const TDirDiscriminator& );
- TDirDiscriminator& operator = ( const OCEDirectoryKind& );
- TDirDiscriminator& operator = ( const DirDiscriminator& );
- TDirDiscriminator& operator = ( const DirDiscriminator* );
-
- // comparison methods -------------------------------------------------------
-
- Boolean operator == ( const TDirDiscriminator& ) const;
- Boolean operator == ( const DirDiscriminator& ) const;
-
- Boolean operator != ( const TDirDiscriminator& ) const;
- Boolean operator != ( const DirDiscriminator& ) const;
-
- // access methods -----------------------------------------------------------
-
- void GetDiscriminator ( DirDiscriminator& ) const;
- void GetDiscriminator ( OCEDirectoryKind& a, unsigned long& b ) const;
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- protected: DirDiscriminator fDiscriminator;
- };
-
- /***********************************|****************************************/
-
- class TDirectory : public TDirectObject
- {
- public: TDirectory ();
- TDirectory ( const TDirectoryName& );
- TDirectory ( const TDirectoryName&, const TDirDiscriminator& );
- TDirectory ( const TDirectory& );
- TDirectory ( const RString* );
- TDirectory ( const DirectoryName*, DirDiscriminator* = nil );
- ~TDirectory ();
-
- // assignment operators ----------------------------------------------------
-
- TDirectory& operator = ( const TDirectory& );
-
- // comparison methods -------------------------------------------------------
-
- Boolean operator == ( const TDirectory& ) const;
- Boolean operator != ( const TDirectory& ) const;
-
- // setters/getters ----------------------------------------------------------
-
- void SetName ( const TDirectoryName& );
- Boolean GetName ( TDirectoryName& r ) const;
- const TDirectoryName& GetName () const;
-
- void SetDiscriminator ( const TDirDiscriminator& );
- Boolean GetDiscriminator ( TDirDiscriminator& ) const;
- const TDirDiscriminator& GetDiscriminator () const;
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- protected: TDirectoryName fName;
- TDirDiscriminator fDiscriminator;
- };
-
- /***********************************|****************************************/
-
- class TPathName : public TDirectObject
- {
- public: TPathName ();
- TPathName ( const PackedPathName& p );
- TPathName ( const PackedPathName* p );
- TPathName ( const TPathName& );
- TPathName ( const RStringPtr * /* ConstRStringPtrArray */, unsigned short );
- TPathName ( const TRString& r1 );
- TPathName ( const TRString& r1, const TRString& r2 );
- TPathName ( const TRString& r1, const TRString& r2, const TRString& r3 );
- ~TPathName ();
-
- // conversion operators -----------------------------------------------------
-
- // these 2 routines provide read-only access, if you cast result to non-const, you’ll shoot yourself
- operator const PackedPathName* () const;
- operator const PackedPathName& () const;
-
- // assignment operators ----------------------------------------------------
-
- TPathName& operator = ( const TPathName& );
- TPathName& operator = ( const PackedPathName& );
- TPathName& operator = ( const PackedPathName* );
-
- // comparison methods -------------------------------------------------------
-
- Boolean operator == ( const TPathName& ) const;
- Boolean operator == ( const PackedPathName& ) const;
-
- Boolean operator != ( const TPathName& ) const;
- Boolean operator != ( const PackedPathName& ) const;
-
- Boolean IsNull () const;
- unsigned short GetNodeCount () const;
- Boolean IsValidIndex ( unsigned short oneBasedIndex ) const;
-
- Boolean SetNode ( unsigned short oneBasedIndex, const TRString& r );
- Boolean GetNode ( unsigned short oneBasedIndex, TRString& r ) const;
- const RString& operator [] ( unsigned short zeroBasedIndex ) const;
-
- PackedPathName* GetNewPackedPath () const;
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- // utility methods ----------------------------------------------------------
-
- static unsigned short GetPhysicalSize ( const PackedPathName* );
-
- // debugging methods --------------------------------------------------------
-
- Boolean IsValid () const;
- static Boolean IsValid ( const PackedPathName* );
-
- protected: PackedPathName* fPacked;
- ConstRStringPtr* fCache;
-
- Boolean IsValidInternal () const;
- void InvalidateCache () const;
- void ValidateCache () const;
- void Deallocate (); // invalidates cache too
-
- static PackedPathName* Allocate ( const TRString* [], unsigned short );
- static PackedPathName* Allocate ( RStringPtr [], unsigned short );
- static PackedPathName* Allocate ( const PackedPathName* );
- static PackedPathName* Allocate ( unsigned short bytes );
- static ConstRStringPtr* AllocateArray ( const TRString* [], unsigned short );
- static ConstRStringPtr* AllocateArray ( const PackedPathName* );
- static void Deallocate ( PackedPathName*& );
- static Boolean IsValidInternal ( const PackedPathName* p );
- };
-
- /***********************************|****************************************/
-
- class TRLI : public TDirectObject
- {
- public: TRLI ();
- TRLI ( const PackedRLI& );
- TRLI ( const PackedRLI* );
- TRLI ( const RLI* );
- TRLI ( const RLI& );
- TRLI ( const TRLI& );
- TRLI ( const TDirectory&, const TPathName&, DNodeNum = 0 );
- TRLI ( const TDirectory&, DNodeNum );
- ~TRLI ();
-
- // conversion operators -----------------------------------------------------
-
- // these 4 routines provide read-only access, if you cast result to non-const, you’ll shoot yourself
- operator const PackedRLI* () const;
- operator const PackedRLI& () const;
- operator const RLI* () const;
- operator const RLI& () const;
-
- // assignment operators ----------------------------------------------------
-
- TRLI& operator = ( const TRLI& );
- TRLI& operator = ( const RLI& );
- TRLI& operator = ( const PackedRLI& );
-
- // comparison methods -------------------------------------------------------
-
- Boolean operator == ( const TRLI& ) const;
- Boolean operator == ( const RLI& ) const;
- Boolean operator == ( const PackedRLI& ) const;
-
- Boolean operator != ( const TRLI& ) const;
- Boolean operator != ( const RLI& ) const;
- Boolean operator != ( const PackedRLI& ) const;
-
- // setters/getters ----------------------------------------------------------
-
- void SetDirectory ( const TDirectory& );
- Boolean GetDirectory ( TDirectory& ) const; // returns true if record has a directory name
- const DirectoryName* GetDirectoryName () const;
- const DirDiscriminator& GetDirectoryDiscriminator () const;
-
- void SetNode ( DNodeNum );
- DNodeNum GetNode () const; // returns true if record has a directory name
-
- void SetPathName ( const TPathName& );
- Boolean GetPathName ( TPathName& ) const; // returns true if record has a path
- const PackedPathName* GetPathName () const;
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- // utility methods ----------------------------------------------------------
-
- static unsigned short GetPhysicalSize ( const PackedRLI* );
- static unsigned short GetPhysicalSizeOfPacked ( const RLI* );
-
- // debugging methods --------------------------------------------------------
-
- Boolean IsValid () const;
- static Boolean IsValid ( const RLI* );
- static Boolean IsValid ( const PackedRLI* );
-
- protected: PackedRLI* fPacked;
- RLI* fUnpacked;
-
- Boolean IsValidInternal () const;
- void ValidateUnpacked () const;
- Boolean ValidateUnpackedAndCheck () const;
- void InvalidateUnpacked () const;
- void Deallocate (); // invalidates unpacked
-
- static PackedRLI* Allocate ( unsigned short bytes );
- static PackedRLI* Allocate ( const RLI* );
- static PackedRLI* Allocate ( const PackedRLI* );
- static void Deallocate ( PackedRLI*& );
- static Boolean IsValidInternal ( const RLI* p );
- static Boolean IsValidInternal ( const PackedRLI* p );
- };
-
- /***********************************|****************************************/
-
- class TRecordID : public TDirectObject
- {
- public: TRecordID ();
- TRecordID ( const RecordID* p );
- TRecordID ( const RecordID& p );
- TRecordID ( const PackedRecordID* p );
- TRecordID ( const PackedRecordID& p );
- TRecordID ( const TRecordID& r );
-
- TRecordID ( const TRString& name, const TRString& type, const DNodeNum d, const TDirectory& dir);
- TRecordID ( const TRString& name, const TRString& type, const TPathName& p, const TDirectory& dir );
- TRecordID ( const TRString& name, const TRString& type, const TRLI& rli);
-
- TRecordID ( const TCreationID& cid, const TPathName& p, const TDirectory& dir );
- TRecordID ( const TCreationID& cid, const DNodeNum d, const TDirectory& dir );
- TRecordID ( const TCreationID& cid, const TRLI& rli );
-
- TRecordID ( const LocalRecordID& localRecordID, const TPathName& p, const TDirectory& dir );
- TRecordID ( const LocalRecordID& localRecordID, const DNodeNum d, const TDirectory& dir );
- TRecordID ( const LocalRecordID& localRecordID, const TRLI& rli );
-
- ~TRecordID();
-
- // conversion operators -----------------------------------------------------
-
- // these 4 routines provide read-only access, if you cast result to non-const, you’ll shoot yourself
- operator const PackedRecordID* () const;
- operator const PackedRecordID& () const;
- operator const RecordID* () const;
- operator const RecordID& () const;
-
- // assignment operators ----------------------------------------------------
-
- TRecordID& operator = ( const TRecordID& );
- TRecordID& operator = ( const RecordID& );
- TRecordID& operator = ( const RecordID* );
- TRecordID& operator = ( const PackedRecordID* );
- TRecordID& operator = ( const PackedRecordID& );
-
- // comparison methods -------------------------------------------------------
-
- Boolean operator == ( const TRecordID& ) const;
- Boolean operator == ( const RecordID& ) const;
- Boolean operator == ( const RecordID* ) const;
- Boolean operator == ( const PackedRecordID& ) const;
- Boolean operator == ( const PackedRecordID* ) const;
-
- Boolean operator != ( const TRecordID& ) const;
- Boolean operator != ( const RecordID& ) const;
- Boolean operator != ( const RecordID* ) const;
- Boolean operator != ( const PackedRecordID& ) const;
- Boolean operator != ( const PackedRecordID* ) const;
-
- // setters/getters methods --------------------------------------------------
-
- Boolean SetNode ( const DNodeNum );
- DNodeNum GetNode () const;
-
- Boolean SetRecordName ( const TRString& );
- Boolean GetRecordName ( TRString& ) const;
-
- Boolean SetRecordType ( const TRString& );
- Boolean GetRecordType ( TRString& ) const;
-
- Boolean SetCreationID ( const TCreationID& );
- Boolean GetCreationID ( TCreationID& ) const;
-
- Boolean SetDirectory ( const TDirectory& );
- Boolean GetDirectory ( TDirectory& ) const;
-
- Boolean SetPathName ( const TPathName& );
- Boolean GetPathName ( TPathName& ) const;
-
- Boolean SetRLI ( const TRLI& );
- Boolean GetRLI ( TRLI& ) const;
-
- PackedRecordID* GetNewPackedRecordID () const; // makes recordIDPtr, allocates new fields
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- // utility methods ----------------------------------------------------------
-
- static unsigned short GetPhysicalSize ( const PackedRecordID* );
- static unsigned short GetPhysicalSizeOfPacked ( const RecordID* );
-
- // debugging methods --------------------------------------------------------
-
- Boolean IsValid () const;
- static Boolean IsValid ( const PackedRecordID* );
- static Boolean IsValid ( const RecordID* );
-
- protected: PackedRecordID* fPacked;
- RecordID* fUnpacked;
-
- Boolean IsValidInternal () const;
- void ValidateUnpacked () const;
- Boolean ValidateUnpackedAndCheck () const;
- void InvalidateUnpacked () const;
- void Deallocate (); // invalidates unpacked too
- Boolean Adopt ( PackedRecordID* );
- Boolean Set ( const RecordID* );
- Boolean Set ( const PackedRLI* );
-
- static PackedRecordID* Allocate ( unsigned short bytes );
- static PackedRecordID* Allocate ( const RecordID* );
- static PackedRecordID* Allocate ( const PackedRecordID* );
- static void Deallocate ( PackedRecordID*& );
- static Boolean IsValidInternal ( const PackedRecordID* );
- static Boolean IsValidInternal ( const RecordID* );
- };
-
- /***********************************|****************************************/
-
- class TDSSpec : public TDirectObject
- {
- public: TDSSpec ();
- TDSSpec ( const RecordID* p, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
- TDSSpec ( const RecordID& p, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0);
- TDSSpec ( const PackedRecordID* p, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
- TDSSpec ( const PackedRecordID& p, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0);
- TDSSpec ( const TRecordID& r, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
-
- TDSSpec ( const DSSpec* p );
- TDSSpec ( const DSSpec& p );
- TDSSpec ( const PackedDSSpec* p );
- TDSSpec ( const PackedDSSpec& p );
- TDSSpec ( const TDSSpec& r );
-
- TDSSpec ( const TRString& name, const TRString& type, const DNodeNum d, const TDirectory& dir, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
- TDSSpec ( const TRString& name, const TRString& type, const TPathName& p, const TDirectory& dir, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0);
- TDSSpec ( const TRString& name, const TRString& type, const TRLI& rli, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0);
-
- TDSSpec ( const TCreationID& cid, const TPathName& p, const TDirectory& dir, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
- TDSSpec ( const TCreationID& cid, const DNodeNum d, const TDirectory& dir, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
- TDSSpec ( const TCreationID& cid, const TRLI& rli, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0);
-
- TDSSpec ( const LocalRecordID& localRecordID, const TPathName& p, const TDirectory& dir, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0);
- TDSSpec ( const LocalRecordID& localRecordID, const DNodeNum d, const TDirectory& dir, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
- TDSSpec ( const LocalRecordID& localRecordID, const TRLI& rli, OSType extensionType, const void* extensionData = nil, unsigned long extensionLength = 0 );
-
- ~TDSSpec();
-
- // conversion operators -----------------------------------------------------
-
- // these routines provide read-only access, if you cast result to non-const, you’ll shoot yourself
- operator const PackedRecordID* () const;
- operator const PackedRecordID& () const;
- operator const RecordID* () const;
- operator const RecordID& () const;
- operator const PackedDSSpec* () const;
- operator const PackedDSSpec& () const;
- operator const DSSpec* () const;
- operator const DSSpec& () const;
-
- // assignment operators ----------------------------------------------------
-
- TDSSpec& operator = ( const TDSSpec& );
- TDSSpec& operator = ( const DSSpec& );
- TDSSpec& operator = ( const DSSpec* );
- TDSSpec& operator = ( const PackedDSSpec* );
- TDSSpec& operator = ( const PackedDSSpec& );
-
- // comparison methods -------------------------------------------------------
-
- Boolean operator == ( const TDSSpec& ) const;
- Boolean operator == ( const DSSpec& ) const;
- Boolean operator == ( const DSSpec* ) const;
- Boolean operator == ( const PackedDSSpec& ) const;
- Boolean operator == ( const PackedDSSpec* ) const;
-
- Boolean operator != ( const TDSSpec& ) const;
- Boolean operator != ( const DSSpec& ) const;
- Boolean operator != ( const DSSpec* ) const;
- Boolean operator != ( const PackedDSSpec& ) const;
- Boolean operator != ( const PackedDSSpec* ) const;
-
- // setters/getters methods --------------------------------------------------
-
- Boolean SetNode ( const DNodeNum );
- DNodeNum GetNode () const;
-
- Boolean SetRecordName ( const TRString& );
- Boolean GetRecordName ( TRString& ) const;
-
- Boolean SetRecordType ( const TRString& );
- Boolean GetRecordType ( TRString& ) const;
-
- Boolean SetCreationID ( const TCreationID& );
- Boolean GetCreationID ( TCreationID& ) const;
-
- Boolean SetDirectory ( const TDirectory& );
- Boolean GetDirectory ( TDirectory& ) const;
-
- Boolean SetPathName ( const TPathName& );
- Boolean GetPathName ( TPathName& ) const;
-
- Boolean SetRLI ( const TRLI& );
- Boolean GetRLI ( TRLI& ) const;
-
- PackedDSSpec* GetNewPackedDSSpec () const; // makes DSSpecPtr, allocates new fields
-
- OSType GetExtensionType () const;
- unsigned long GetExtensionSize() const;
- const void * GetExtensionValue () const;
-
- // i/o methods --------------------------------------------------------------
-
- Boolean Read ( TAbstractFile& );
- Boolean Write ( TAbstractFile& ) const;
- virtual ostream& operator >> ( ostream& ) const;
-
- // utility methods ----------------------------------------------------------
-
- static unsigned short GetPhysicalSize ( const PackedDSSpec* );
- static unsigned short GetPhysicalSizeOfPacked ( const DSSpec* );
-
- // debugging methods --------------------------------------------------------
-
- Boolean IsValid () const;
- static Boolean IsValid ( const PackedDSSpec* );
- static Boolean IsValid ( const DSSpec* );
-
- protected: PackedDSSpec* fPacked;
- DSSpec* fUnpacked;
-
- Boolean IsValidInternal () const;
- void ValidateUnpacked () const;
- Boolean ValidateUnpackedAndCheck () const;
- void InvalidateUnpacked () const;
- void Deallocate (); // invalidates unpacked too
- Boolean Adopt ( PackedDSSpec* );
- Boolean Set ( const DSSpec* );
- Boolean Set ( const PackedRLI* );
-
- static PackedDSSpec* Allocate ( unsigned short bytes );
- static PackedDSSpec* Allocate ( const DSSpec* );
- static PackedDSSpec* Allocate ( const PackedDSSpec* );
- static void Deallocate ( PackedDSSpec*& );
- static Boolean IsValidInternal ( const PackedDSSpec* );
- static Boolean IsValidInternal ( const DSSpec* );
- };
-
- /***********************************|****************************************/
-
- // handy streaming functions
-
- extern ostream& operator << ( ostream& s, const RString& );
- extern ostream& operator << ( ostream& s, const DirectoryName& );
- extern ostream& operator << ( ostream& s, const CreationID& );
- extern ostream& operator << ( ostream& s, const DirDiscriminator& );
- extern ostream& operator << ( ostream& s, const PackedPathName& );
- extern ostream& operator << ( ostream& s, const RLI& );
- extern ostream& operator << ( ostream& s, const PackedRLI& );
- extern ostream& operator << ( ostream& s, const RecordID& );
- extern ostream& operator << ( ostream& s, const PackedRecordID& );
-
- inline ostream& operator << (ostream& s, const ProtoPackedPathName& p) { return s << (const PackedPathName&) p; }
- inline ostream& operator << (ostream& s, const ProtoRString& p) { return s << (const RString&) p; }
- inline ostream& operator << (ostream& s, const NetworkSpec& p) { return s << (const RString&) p; }
-
- #ifndef THINK_CPLUS
- // Apparently, Think C++ doesn't like these functions.
- extern ostream& operator << ( ostream& s, const RString* );
- extern ostream& operator << ( ostream& s, const DirectoryName* );
- extern ostream& operator << ( ostream& s, const CreationID* );
- extern ostream& operator << ( ostream& s, const DirDiscriminator* );
- extern ostream& operator << ( ostream& s, const PackedPathName* );
- extern ostream& operator << ( ostream& s, const RLI* );
- extern ostream& operator << ( ostream& s, const PackedRLI* );
- extern ostream& operator << ( ostream& s, const RecordID* );
- extern ostream& operator << ( ostream& s, const PackedRecordID* );
-
- inline ostream& operator << (ostream& s, const ProtoPackedPathName* p) { return s << (const PackedPathName*) p; }
- inline ostream& operator << (ostream& s, const ProtoRString* p) { return s << * (const RString*) p; }
- inline ostream& operator << (ostream& s, const NetworkSpec* p) { return s << * (const RString*) p; }
- #endif
-
- /***********************************|****************************************/
-
- // TRString inlines
-
- inline unsigned short TRString::GetPhysicalSize ( unsigned short logicalSize ) { return logicalSize + sizeof ( ProtoRString ) + 1; } // extra byte for null terminator
- inline unsigned short TRString::GetLength () const { return fString->dataLength; }
- inline CharacterSet TRString::GetScript () const { return fString->charSet; }
- inline RStringKind TRString::GetKind () const { return fKind; }
- inline Boolean TRString::operator == ( const char* string ) const { return Compare ( string ) == 0; }
- inline Boolean TRString::operator != ( const char* string ) const { return Compare ( string ) != 0; }
- inline Boolean TRString::operator > ( const char* string ) const { return Compare ( string ) > 0; }
- inline Boolean TRString::operator < ( const char* string ) const { return Compare ( string ) < 0; }
- inline Boolean TRString::operator == ( const StringPtr string ) const { return Compare ( string ) == 0; }
- inline Boolean TRString::operator != ( const StringPtr string ) const { return Compare ( string ) != 0; }
- inline Boolean TRString::operator > ( const StringPtr string ) const { return Compare ( string ) > 0; }
- inline Boolean TRString::operator < ( const StringPtr string ) const { return Compare ( string ) < 0; }
- inline Boolean TRString::operator == ( const RString& string ) const { return Compare ( string ) == 0; }
- inline Boolean TRString::operator != ( const RString& string ) const { return Compare ( string ) != 0; }
- inline Boolean TRString::operator > ( const RString& string ) const { return Compare ( string ) > 0; }
- inline Boolean TRString::operator < ( const RString& string ) const { return Compare ( string ) < 0; }
- inline Boolean TRString::operator == ( const TRString& string ) const { return Compare ( string ) == 0; }
- inline Boolean TRString::operator != ( const TRString& string ) const { return Compare ( string ) != 0; }
- inline Boolean TRString::operator > ( const TRString& string ) const { return Compare ( string ) > 0; }
- inline Boolean TRString::operator < ( const TRString& string ) const { return Compare ( string ) < 0; }
- #if defined ( INTERNAL_CHECKS )
- inline Boolean TRString::IsValidInternal () const { return IsValidInternal ( fString, fKind ); }
- #else
- inline Boolean TRString::IsValidInternal () const { return true; }
- inline Boolean TRString::IsValidInternal ( const RString*, RStringKind ) { return true; }
- #endif
-
- /***********************************|****************************************/
-
- // TDirectoryName inlines
-
- inline TDirectoryName::operator const DirectoryName* () const { return (const DirectoryName*) TRString::operator const RString* (); }
- inline TDirectoryName::operator const DirectoryName& () const { return (const DirectoryName&) TRString::operator const RString& (); }
- inline const TDirectoryName& TDirectory::GetName () const { return fName; }
- inline const TDirDiscriminator& TDirectory::GetDiscriminator () const { return fDiscriminator; }
-
- /***********************************|****************************************/
-
- // TCreationID inlines
-
- inline Boolean TCreationID::operator == ( const TCreationID& that ) const { return operator == ( that.fID ); }
- inline Boolean TCreationID::operator != ( const CreationID& that ) const { return !operator == ( that ); }
- inline Boolean TCreationID::operator != ( const TCreationID& that ) const { return !operator == ( that.fID ); }
- inline TCreationID::operator const CreationID* () const { return &fID; }
- inline TCreationID::operator const CreationID& () const { return fID; }
-
- /***********************************|****************************************/
-
- // TDirDiscriminator inlines
-
- inline Boolean TDirDiscriminator::operator == ( const TDirDiscriminator& that ) const { return operator == ( that.fDiscriminator ); }
- inline Boolean TDirDiscriminator::operator != ( const TDirDiscriminator& that ) const { return !operator == ( that.fDiscriminator ); }
- inline Boolean TDirDiscriminator::operator != ( const DirDiscriminator& that ) const { return !operator == ( that ); }
- inline TDirDiscriminator::operator DirDiscriminator* () const { return &( (TDirDiscriminator*) this )->fDiscriminator; }
- inline TDirDiscriminator::operator DirDiscriminator& () const { return ( (TDirDiscriminator*) this )->fDiscriminator; }
-
- /***********************************|****************************************/
-
- // TDirectory inlines
-
- inline Boolean TDirectory::operator != ( const TDirectory& that ) const { return !operator == ( that ); }
-
- /***********************************|****************************************/
-
- // TPathName inlines
-
- inline TPathName::operator const PackedPathName* () const { return fPacked; }
- inline TPathName::operator const PackedPathName& () const { return *fPacked; }
- inline TPathName& TPathName::operator = ( const PackedPathName& p ) { return operator = ( &p ); }
- inline Boolean TPathName::operator != ( const TPathName& that ) const { return !operator == ( that ); }
- inline Boolean TPathName::operator != ( const PackedPathName& that ) const { return !operator == ( that ); }
- inline Boolean TPathName::IsNull () const { return ::OCEIsNullPackedPathName ( fPacked ); }
- inline PackedPathName* TPathName::GetNewPackedPath () const { return Allocate ( fPacked ); }
- inline Boolean TPathName::IsValid () const { return IsValid ( fPacked ); }
- #if defined ( INTERNAL_CHECKS )
- inline Boolean TPathName::IsValidInternal () const { return IsValidInternal ( fPacked ); }
- #else
- inline Boolean TPathName::IsValidInternal () const { return true; }
- inline Boolean TPathName::IsValidInternal ( const PackedPathName* ) { return true; }
- #endif
-
- /***********************************|****************************************/
-
- // TRLI inlines
-
- inline TRLI::operator const PackedRLI* () const { return fPacked; }
- inline TRLI::operator const PackedRLI& () const { return *fPacked; }
- inline Boolean TRLI::operator != ( const RLI& that ) const { return !operator == ( that ); }
- inline Boolean TRLI::IsValid () const { return IsValid ( fPacked ); }
- #if defined ( INTERNAL_CHECKS )
- inline Boolean TRLI::IsValidInternal () const { return IsValidInternal ( fPacked ); }
- #else
- inline Boolean TRLI::IsValidInternal () const { return true; }
- inline Boolean TRLI::IsValidInternal ( const RLI* ) { return true; }
- inline Boolean TRLI::IsValidInternal ( const PackedRLI* ) { return true; }
- #endif
-
- /***********************************|****************************************/
-
- // TRecordID inlines
-
- inline TRecordID::operator const PackedRecordID* () const { return fPacked; }
- inline TRecordID::operator const PackedRecordID& () const { return *fPacked; }
- inline TRecordID& TRecordID::operator = ( const TRecordID& that ) { return operator = ( that.fPacked ); }
- inline TRecordID& TRecordID::operator = ( const RecordID& r ) { return operator = ( &r ); }
- inline TRecordID& TRecordID::operator = ( const PackedRecordID& r ) { return operator = ( &r ); }
- inline Boolean TRecordID::operator == ( const PackedRecordID& r ) const { return operator == ( &r ); }
- inline Boolean TRecordID::operator != ( const PackedRecordID* r ) const { return !operator == ( r ); }
- inline Boolean TRecordID::operator != ( const PackedRecordID& r ) const { return operator != ( &r ); }
- inline Boolean TRecordID::operator == ( const TRecordID& that ) const { return operator == ( that.fPacked ); }
- inline Boolean TRecordID::operator != ( const TRecordID& that ) const { return operator != ( that.fPacked ); }
- inline Boolean TRecordID::operator == ( const RecordID& r ) const { return operator == ( &r ); }
- inline Boolean TRecordID::operator != ( const RecordID* r ) const { return !operator == ( r ); }
- inline Boolean TRecordID::operator != ( const RecordID& r ) const { return operator != ( &r ); }
- inline PackedRecordID* TRecordID::GetNewPackedRecordID () const { return Allocate ( fPacked ); }
- inline Boolean TRecordID::IsValid () const { return IsValid ( fPacked ); }
- #if defined ( INTERNAL_CHECKS )
- inline Boolean TRecordID::IsValidInternal () const { return IsValidInternal ( fPacked ); }
- #else
- inline Boolean TRecordID::IsValidInternal () const { return true; }
- inline Boolean TRecordID::IsValidInternal ( const RecordID* ) { return true; }
- inline Boolean TRecordID::IsValidInternal ( const PackedRecordID* ) { return true; }
- #endif
-
- /***********************************|****************************************/
-
- // TDSSpec inlines
-
- inline TDSSpec::operator const PackedDSSpec* () const { return fPacked; }
- inline TDSSpec::operator const PackedDSSpec& () const { return *fPacked; }
- inline TDSSpec& TDSSpec::operator = ( const TDSSpec& that ) { return operator = ( that.fPacked ); }
- inline TDSSpec& TDSSpec::operator = ( const DSSpec& r ) { return operator = ( &r ); }
- inline TDSSpec& TDSSpec::operator = ( const PackedDSSpec& r ) { return operator = ( &r ); }
- inline Boolean TDSSpec::operator == ( const PackedDSSpec& r ) const { return operator == ( &r ); }
- inline Boolean TDSSpec::operator != ( const PackedDSSpec* r ) const { return !operator == ( r ); }
- inline Boolean TDSSpec::operator != ( const PackedDSSpec& r ) const { return operator != ( &r ); }
- inline Boolean TDSSpec::operator == ( const TDSSpec& that ) const { return operator == ( that.fPacked ); }
- inline Boolean TDSSpec::operator != ( const TDSSpec& that ) const { return operator != ( that.fPacked ); }
- inline Boolean TDSSpec::operator == ( const DSSpec& r ) const { return operator == ( &r ); }
- inline Boolean TDSSpec::operator != ( const DSSpec* r ) const { return !operator == ( r ); }
- inline Boolean TDSSpec::operator != ( const DSSpec& r ) const { return operator != ( &r ); }
- inline PackedDSSpec* TDSSpec::GetNewPackedDSSpec () const { return Allocate ( fPacked ); }
- inline Boolean TDSSpec::IsValid () const { return IsValid ( fPacked ); }
- #if defined ( INTERNAL_CHECKS )
- inline Boolean TDSSpec::IsValidInternal () const { return IsValidInternal ( fPacked ); }
- #else
- inline Boolean TDSSpec::IsValidInternal () const { return true; }
- inline Boolean TDSSpec::IsValidInternal ( const DSSpec* ) { return true; }
- inline Boolean TDSSpec::IsValidInternal ( const PackedDSSpec* ) { return true; }
- #endif
-
- /***********************************|****************************************/
-
- #pragma pop
-
- #endif // __OCEOBJECTS__
-